# 定义学生信息系统管理类 StudentCMS
# 1 init方法 student_list=[]
# 2 显示界面 @staticmethod show_info()

# 3 循环显示功能菜单 start()
# 4 测试功能


# 1 添加学员 add_student()
    # 1 创建学生对象mystu / 2 添加到student_list列表中
# 2 修改学员 update_student()
    # 1 输入学员姓名update_name / 2 遍历学员信息 修改
# 3 删除学员 del_student()
    # 1 输入要删除的学员del_name / 2 查找学员, 找到就删除
# 4 查询某个学员 search_student()
    # 1 输入要查询的学员姓名search_name / 2 查找学员, 找到就显示
# 5 显示所有学员信息 show_all_student()
    # 1 遍历列表  2 输出每个学员信息
# 6 保存学员信息 save_student()
    # 1 打开文件-写方式  # 2 准备数据 写数据 # 3 关闭文件
    # listdata / str([student.__dict__ for student in self.student_list])
# 7 加载文件中的学员信息 load_data(self)
    # 1 打开文件 / 2 读取数据 转成student_list / 3 关闭文件
    # data=myf.read() / if len(data)==: data='[]'/ listdata=eval(data)


from zz01_student import Student
import time

class StudentCMS(object):
    # init方法 student_list=[]
    def __init__(self):
        self.student_list = []
        pass

    # 显示界面 @staticmethod show_info()
    @staticmethod
    def show_info():
        print("*" * 40)
        print('本学员管理系统V2.0完成一下操作:')
        print('\t1.添加学员')
        print('\t2.修改学员')
        print('\t3.删除学员')
        print('\t4.查询某个学员')
        print('\t5.显示所有学员')
        print('\t6.保存学员')
        print('\t0.退出系统')
        print("*" * 40)
        pass

    # 加载文件中的学员信息 load_data()
    def load_data(self):
        # 1 打开文件
        try:
            myf = open(file='./mystudent.data', mode='r', encoding='utf-8')
        except :
            myf = open(file='./mystudent.data', mode='w+', encoding='utf-8')

        # 2 读取数据 转成student_list
        data = myf.read()
        if len(data) == 0:
            data = '[]'
        listdata = eval(data)
        self.student_list = [ Student(i['name'], i['age'], i['gender'],
                                      i['mobile'], i['des']) for i in listdata]
        # 3 关闭文件
        myf.close()


    # 添加学员 add_student()
    def add_student(self):
        # 1 创建学生对象mystu / 2 添加到student_list列表中
        name = input('请输入学生姓名')
        age = input('请输入学生年龄')
        gender = input('请输入学生性别(男/女)')
        mobile = input('请输入学生电话')
        des = input('请输入学生描述信息')
        student = Student(name, age, gender, mobile, des)
        self.student_list.append(student)

    # 修改学员 update_student()
    def update_student(self):
        # 1 输入学员姓名update_name / 2 遍历学员信息 修改
        updata_name = input('请输入学生姓名')
        for student in self.student_list:
            if updata_name == student.name:
                student.age = input('请输入学生年龄')
                student.gender = input('请输入学生性别(男/女)')
                student.mobile = input('请输入学生电话')
                student.des = input('请输入学生描述信息')
                break
        else:
            print('查无此人')

    # 删除学员 del_student()
    def del_student(self):
        # 1 输入要删除的学员del_name / 2 查找学员, 找到就删除
        del_name = input('请输入学生姓名')
        for student in self.student_list:
            if del_name == student.name:
                self.student_list.remove(student)
                break
        else:
            print('查无此人')

    # 查询某个学员 search_student()
    def search_student(self):
        # 1 输入要查询的学员姓名search_name / 2 查找学员, 找到就显示
        search_name = input('请输入学生姓名')
        for student in self.student_list:
            if search_name == student.name:
                print(student)
                break
        else:
            print('查无此人')

    # 显示所有学员信息 show_all_student()
    def show_all_student(self):
        # 1 遍历列表  2 输出每个学员信息
        print('\t姓名\t性别\t年龄\t电话\t备注')
        for student in self.student_list:
            print(f'\t{student.name}\t{student.gender}\t{student.age}\t{student.mobile}\t{student.des}')

    # 保存学员
    def save_student(self):
        # 1 打开文件-写方式
        myf = open(file='./mystudent.data', mode='w', encoding='utf-8')
        # 2 准备数据 listdata / str([student.__dict__ for student in self.student_list])
        listdata = str([student.__dict__ for student in self.student_list])
        print('listdata-->\n', listdata)
        myf.write(listdata)
        # 3 关闭文件
        myf.close()
        print('写文件ok')
        pass

    # 循环显示功能菜单 start()
    def start(self):
        self.load_data()

        # 测试数据
        # s1 = Student('张三', 21, '男', '101081', '爱好AI1')
        # s2 = Student('李四', 22, '女', '101082', '爱好AI2')
        # s3 = Student('王五', 23, '男', '101083', '爱好AI3')
        # self.student_list.append(s1)
        # self.student_list.append(s2)
        # self.student_list.append(s3)

        while True:
            time.sleep(1)
            StudentCMS.show_info()
            num = int(input('\n请输入要执行的命令编号:'))
            if num == 1:
                print('请添加学员')
                self.add_student()
            elif num == 2:
                print('请修改学员')
                self.update_student()
            elif num == 3:
                print('请删除学员')
                self.del_student()
            elif num == 4:
                print('查询某个学员')
                self.search_student()
            elif num == 5:
                print('显示所有学员')
                self.show_all_student()
            elif num == 6:
                print('执行保存学员')
                self.save_student()
            elif num == 0:
                str = input('你是否要退出系统(Y/N):')
                if str.lower() == "y":
                    print('退出系统,再见')
                    break
            else:
                print('请输入0-6之间的序号,新的功能敬请期待')


if __name__ == '__main__':
    # 测试功能
    stucms = StudentCMS()
    stucms.start()



